跳到主要内容

cpp 的 lambda 语法

在 C++ 中,[] 是一个 lambda 表达式的引入符号,用于定义一个匿名函数(即 lambda 函数)。Lambda 函数是一种便捷的方式,允许你在不需要明确命名一个函数的情况下定义函数行为。它特别适用于定义简短的回调函数或是需要作为参数传递给其他函数的逻辑。

Lambda 表达式的基本语法如下:

[ capture_clause ] ( parameters ) -> return_type {
function_body
}
  • capture_clause:捕获子句,定义了从封闭作用域(通常是定义 lambda 的函数)中哪些变量可以被 lambda 函数体内的代码使用。它可以捕获变量的值(通过值捕获)或引用(通过引用捕获)。如果不需要捕获任何变量,可以使用空的捕获列表 []
  • parameters:参数列表,就像普通函数定义中一样。如果 lambda 不接受任何参数,可以省略参数列表或者写一个空的括号对 ()
  • return_type:返回类型,这是可选的。如果 lambda 函数体包含单一的返回语句,或者返回类型可以自动推导,则可以省略返回类型。
  • function_body:函数体,包含了 lambda 函数的实际代码。

例如下面的代码:

[](PyOcrService& self, py::array_t<unsigned char> image) -> py::dict {
cv::Mat mat = numpy_to_mat(image);
return self.run_ocr(mat);
}
  • [] 表示该 lambda 没有捕获外部变量。
  • (PyOcrService& self, py::array_t<unsigned char> image) 是参数列表,说明这个 lambda 接收两个参数:一个 PyOcrService 类型的引用和一个 py::array_t<unsigned char> 类型的参数。
  • -> py::dict 指定了 lambda 的返回类型是 py::dict
  • 函数体中,首先将 numpy.ndarray 转换为 cv::Mat,然后调用 PyOcrService 实例的 run_ocr 方法,并返回其结果。